/*
 * Materia.java
 *
 * Created on 30 de abril de 2008, 12:25 
 */

package InterfazBD;

import Beans.*;
import java.sql.*;
import java.util.*;

/**
 *
 * @author Marco Sobrino
 */
public class Materia {
    
    
    private BeanMateria datosMateria;
    private LinkedList materias;
    private LinkedList allMaterias;
    private LinkedList<ResuSet> materias2;
    private LinkedList<ResuSet> datMat;
    
    /**
     * Creates a new instance of Materia
     */
    public Materia()
    {
    }

    /**
     * Getter for property datosMateria.
     * @return Value of property datosMateria.
     */
    public BeanMateria getDatosMateria() 
    {
       return this.datosMateria;
    }

    /**
     * Setter for property datosMateria.
     * @param datosMateria New value of property datosMateria.
     */
    public void setDatosMateria(BeanMateria datosMateria) 
    {
       this.datosMateria = datosMateria;
    }

    public void agregarMateria() throws Exception
    {
        Conexion conexionBD = new Conexion();
        Connection conn = conexionBD.conectar();
        Statement stm = conn.createStatement();
        stm.execute("INSERT INTO web.materia (idProfesor, idAdministrador, nombre, descripcion) values (" +
                    datosMateria.getIdProfesor() + ", " +
                    datosMateria.getIdAdministrador() + ", " +
                    "\'" + datosMateria.getNombre() + "\', " +
                    "\'" + datosMateria.getDescripcion() + "\')" );
        stm.close();
        conexionBD.desconectar();
    }

    public void quitarMateria() throws Exception
    {
        Conexion conexionBD = new Conexion();
        Connection conn = conexionBD.conectar();
        Statement stm = conn.createStatement();
        stm.execute("DELETE FROM web.materia WHERE idMateria = " + datosMateria.getIdMateria() );
        stm.close();
        conexionBD.desconectar();
    }
    
    /**
     * Trae las materias que le corresponde a un profesor
     * @idProfesor: id del Profesor
     */
    public void traerMateriasProfesor(int idProfesor) throws Exception
    {   
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();                
                
//        ResultSet prof = stm.executeQuery ("SELECT idusuario " +
//                                           "FROM web.usuario " +
//                                           "WHERE usuario = '"+idProfesor+"'");        
//        prof.next();
        
        materias = new LinkedList();
        ResultSet mat = stm.executeQuery("SELECT nombre " +
                                         "FROM web.materia " +
                                         "WHERE idprofesor = "+idProfesor +" "+
                                         "ORDER BY nombre");
        
        while(mat.next()){
            materias.add(mat.getString("nombre"));
        }
                
        stm.close();
        conexionBD.desconectar();   
    }
    
    /**
     * Trae todas las materias
     */
    public void traerAllMaterias() throws Exception
    {   
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();                
                    
        allMaterias = new LinkedList();
        ResultSet mat = stm.executeQuery("SELECT nombre " +
                                         "FROM web.materia " +
                                         "ORDER BY nombre");
                
        while(mat.next()){
            allMaterias.add(mat.getString("nombre"));
        }
                
        stm.close();
        conexionBD.desconectar();   
    }
    
    /**
     * Trae las materias en los que esta inscripto un alumno
     * @idAlumno: id del Alumno
     */
    public void traerMateriasAlumno(int idAlumno) throws Exception
    {   
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();                
                
//        ResultSet alum = stm.executeQuery ("SELECT idusuario " +
//                                           "FROM web.usuario " +
//                                           "WHERE usuario = '"+idAlumno+"'");        
//        alum.next();
        
        materias2 = new LinkedList();
        ResultSet mat = stm.executeQuery("SELECT C.idmateria, M.nombre, C.habilitado " +
                                         "FROM web.cursa as C INNER JOIN web.materia as M on M.idmateria = C.idmateria " +
                                         "WHERE C.idalumno = "+idAlumno+" "+
                                         "ORDER BY M.nombre");
        
        while(mat.next()){
            ResuSet obj = new ResuSet();
            
            obj.SetColumna1(mat.getString("nombre"));
            obj.SetColumna6(mat.getInt("idmateria"));
            if (mat.getString("habilitado").charAt(0) == 'n' || mat.getString("habilitado").charAt(0) == 'N')
                obj.SetColumna2("*");            
            
            materias2.add(obj);            
        }
                
        stm.close();
        conexionBD.desconectar();   
    }
    
    
    /**
     * Trae las materias en los que NO esta inscripto un alumno
     * @idAlumno: id del Alumno
     */
    public void traerRestoMaterias(int idAlumno) throws Exception
    {   
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();                
                
//        ResultSet alum = stm.executeQuery ("SELECT idusuario " +
//                                           "FROM web.usuario " +
//                                           "WHERE usuario = '"+idAlumno+"'");        
//        alum.next();
        
        materias = new LinkedList();
        ResultSet mat = stm.executeQuery("SELECT nombre " +
                                         "FROM web.materia " +
                                         "WHERE idmateria NOT IN (SELECT idmateria "+
                                                                 "FROM web.cursa "+
                                                                 "WHERE idalumno = "+idAlumno+") "+                                                         
                                         "ORDER BY nombre");
        
        while(mat.next()){                        
            materias.add(mat.getString("nombre"));            
        }
                
        stm.close();
        conexionBD.desconectar();   
    }
    
    
    /**
     * Trae los datos de las materias que le corresponde a un profesor
     * @idProfesor: id del Profesor
     */
    public void traerDatMateria(int idProfesor) throws Exception
    {   
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();                
       
//        ResultSet prof = stm.executeQuery ("SELECT idusuario " +
//                                           "FROM web.usuario " +
//                                           "WHERE usuario = '"+nomProfesor+"'");        
//        prof.next();
       
        datMat = new LinkedList();
       
        ResultSet mat = stm.executeQuery("SELECT M.nombre, M.idmateria, E.idexamen, E.fechaini, E.fechafin, E.duracion, E.puntaje, E.fecharev " +
                                         "FROM web.materia as M INNER JOIN web.examen as E on M.idmateria = E.idmateria " +
                                         "WHERE M.idprofesor = "+idProfesor+" and  "+
                                         "E.estado = \'V\' "+ 
                                         "ORDER BY E.fechaini DESC");
       
        while(mat.next()){                        
            ResuSet obj = new ResuSet();
            
            obj.SetColumna1(mat.getString("nombre"));
            obj.SetColumna7(mat.getInt("idmateria"));
            obj.SetColumna8(mat.getInt("idexamen"));
            obj.SetColumna11(mat.getDate("fechaini"));
            obj.SetColumna12(mat.getDate("fechafin"));
            obj.SetColumna2(""+mat.getTime("duracion"));
            obj.SetColumna6(mat.getInt("puntaje"));
            obj.SetColumna13(mat.getDate("fecharev"));
            
            datMat.add(obj);       
        }       
        stm.close();
        conexionBD.desconectar();          
    }
    
     /**
     * Trae los datos de las materias que le corresponde a un Alumno
     * @idAlumno: id del Alumno
     */
    public void traerDatMateriaA(int idAlumno) throws Exception
    {   
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();                
                
//        ResultSet alum = stm.executeQuery ("SELECT idusuario " +
//                                           "FROM web.usuario " +
//                                           "WHERE usuario = '"+idAlumno+"'");        
//        alum.next();
        
        datMat = new LinkedList();
        ResultSet mat = stm.executeQuery("SELECT DISTINCT C.idmateria, M.nombre, E.idexamen, E.fechaini, E.fechafin, E.duracion, E.puntaje AS punte, E.fecharev, R.puntaje as punta, R.estado, R.revision, R.pin " +
                                         "FROM web.cursa as C INNER JOIN web.materia as M on M.idmateria = C.idmateria,  " +
                                              "web.examen as E LEFT OUTER JOIN web.rinde as R on E.idexamen = R.idexamen and R.idalumno = "+idAlumno+" "+
                                         "WHERE E.estado = \'V\' and "+ 
                                               "C.idmateria = E.idmateria "+
                                         "ORDER BY E.fechaini DESC");
        
        while(mat.next()){                        
            ResuSet obj = new ResuSet();
            
            obj.SetColumna6(mat.getInt("idmateria"));
            obj.SetColumna1(mat.getString("nombre"));
            obj.SetColumna7(mat.getInt("idexamen"));
            obj.SetColumna11(mat.getDate("fechaini"));
            obj.SetColumna12(mat.getDate("fechafin"));
            obj.SetColumna2(""+mat.getTime("duracion"));
            obj.SetColumna8(mat.getInt("punte"));
            obj.SetColumna13(mat.getDate("fecharev"));
            obj.SetColumna3(mat.getString("punta"));
            obj.SetColumna4(mat.getString("estado"));
            obj.SetColumna5(mat.getString("revision"));
            obj.SetColumna15(mat.getString("pin"));
            
            datMat.add(obj);
        }       
        stm.close();
        conexionBD.desconectar();                
    }
    
    /**
     * Devuelve el id de materia para un nombre de materia dado
     * @nomProfesor: nombre del Profesor
     */
    public int getIdMat(String nomMat) throws Exception
    {   
        Conexion conexionBD = new Conexion();               
        Connection conn = conexionBD.conectar();        
        Statement stm = conn.createStatement();                
                
        //System.out.println("nomMat----"+nomMat+"----");
        ResultSet idMat = stm.executeQuery ("SELECT idmateria " +
                                            "FROM web.materia " +
                                            "WHERE nombre = '"+nomMat+"'");        
       
       idMat.next();        
       int id = idMat.getInt("idmateria");
                
        stm.close();
        conexionBD.desconectar();                
        
        return id;
    }
    
    
    public LinkedList materias(){
        return materias;
    }
    
    public LinkedList allMaterias(){
        return allMaterias;
    }
    
    public LinkedList<ResuSet> datMaterias(){
        return datMat;
    }
    
    public LinkedList<ResuSet> materias2(){
        return materias2;
    }
}